let context = require.context("../pages", true, /\.js/);

let pathArr = context.keys().map(item => {
    // 获取组件
    let component = context(item).default;
    // 设置 meta
    let meta = component["meta"] || { title: "路由名", icon: "UserOutlined" };
    // 获取路径
    let path = item.replace(/(\/index\.js|\.js)$/, "").substr(1).toLocaleLowerCase();

    // 返回一个扁平化的集中式路由
    return {
        path,
        component,
        exact: false,
        auth: true,
        meta
    }

})

// 将子路由归位到父路由下面的 children 属性
function reverseTree(routers) {
    routers.forEach((item, i) => {
        let comparsePaths = item.path.split("/").splice(1);

        if (comparsePaths.length === 1) {
            // 这些都是父节点
            item.id = comparsePaths.join("")
        } else {
            // 这些都是二级路由
            // 配置自己id
            item.id = comparsePaths.join("")
            // 配置parent_id(数组除去最后剖一个元素)
            comparsePaths.pop()
            item.parent_id = comparsePaths.join("");

            // 子路由开启严格模式
            item.exact = true;

        }
    })

    // 接收处理好之后的数组
    let routerTree = [];
    routers.forEach(item => {
        if (item.id === "login" || item.id === "page404") {
            item.auth = false
        }

        if (item.parent_id) {
            // 找到与 parent_id 相对应的父节点
            let target = routers.find(v => item.parent_id === v.id);

            // 判断父节点是否有 children 属性，没有则给个空数组
            if (!target.children) {
                target.children = [];
            }

            // 把子路由 push 到对应的父节点 children 中
            target.children.push(item)
        } else {
            // 这里代表是根节点，把处理好的根节点 push 到 routerTree上返回即可
            routerTree.push(item);
        }
    })
    return routerTree;
}

export default reverseTree(pathArr);